---
title: "Installation + Setup"
sidebarTitle: "Installation + Setup"
icon: "gear"
---

### Installing ART

The ART client can be installed into projects designed to run on any machine that runs python.

```bash
pip install openpipe-art
```

### Running the server locally

The ART server can be run locally on any machine with a GPU. To install the backend dependencies required for training and inference, you can install the `backend` extra:

```bash
pip install openpipe-art[backend]
```



```python
from art import TrainableModel, gather_trajectory_groups
from art.local.backend import LocalBackend

backend = LocalBackend()

model = TrainableModel(
    name="agent-001",
    project="my-agentic-task",
    base_model="OpenPipe/Qwen3-14B-Instruct",
)

await model.register(backend)

... the rest of your code ...
```

### Using a managed autoscaling backend

Instead of managing the GPUs and training processes yourself, you can optionally send inference and training requests to the W&B Training cluster, which autoscales to match your job's demand. To do so, install `openpipe-art` without any extras and use `ServerlessBackend`:

```bash
pip install openpipe-art
```


```python
from art import TrainableModel, gather_trajectory_groups
from art.serverless.backend import ServerlessBackend

backend = ServerlessBackend()

model = TrainableModel(
    name="agent-001",
    project="my-agentic-task",
    base_model="OpenPipe/Qwen3-14B-Instruct",
)

await model.register(backend)

... the rest of your code ...
```

### Running the server on remote dedicated GPUs

The ART client can also be run locally and connected to a remote server, which ART will automatically provision for you. To use SkyPilot, you'll need to install the optional dependency:

```bash
pip install openpipe-art[skypilot]
```

Then you can use SkyPilotBackend in your code:

```python
from art import TrainableModel, gather_trajectory_groups
from art.skypilot.backend import SkyPilotBackend

backend = await SkyPilotBackend.initialize_cluster(
    cluster_name="my-cluster",
    gpu="H100"
)

model = TrainableModel(
    name="agent-001",
    project="my-agentic-task",
    base_model="OpenPipe/Qwen3-14B-Instruct",
)

await model.register(backend)

... the rest of your code ...
```

To learn more about the ART client and server, see the docs below.

<div className="cards-container">
  <div className="card-wrapper">
    <Card
      title="ART Client"
      icon="laptop-code"
      href="/fundamentals/art-client"
      horizontal={true}
      arrow={true}
    >
      The client is responsible for interfacing between your code and the ART
      backend.
    </Card>
  </div>
  <div className="card-wrapper">
    <Card
      title="ART Backend"
      icon="server"
      href="/fundamentals/art-backend"
      horizontal={true}
      arrow={true}
    >
      The backend is responsible for generating tokens and training your models.
    </Card>
  </div>
</div>
